package com.bora_bandeco;

import static com.bora_bandeco.CommonUtilities.IREI;
import static com.bora_bandeco.CommonUtilities.NAO_IREI;
import static com.bora_bandeco.CommonUtilities.SEM_RESPOSTA;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;

import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.support.v4.app.FragmentManager;
import android.text.Html;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.actionbarsherlock.app.ActionBar;
import com.slidingmenu.lib.SlidingMenu;
import com.slidingmenu.lib.app.SlidingFragmentActivity;

public class ConviteActivity extends SlidingFragmentActivity  {
	
	public FragmentManager mFragmentManager;
	
	private ConvidadosConviteListAdapter adapter;
	
	private int meuIdContato;
	
	private Convite convite;
	
	public static Intent starterIntent;
	
	
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		this.mFragmentManager = getSupportFragmentManager();

		ActionBar actionBar = this.getSupportActionBar();
		actionBar.setCustomView(R.layout.actionbar);
		actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
		actionBar.setLogo(R.drawable.actionbar_logo);
		actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
        actionBar.setDisplayHomeAsUpEnabled(false);
        actionBar.setHomeButtonEnabled(true);

        SlidingMenu slidingMenu = getSlidingMenu();
        slidingMenu.setBehindWidthRes(R.dimen.sliding_menu_width);
        slidingMenu.setBehindScrollScale(0.0f);
        slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
        setBehindContentView(R.layout.fragment_menu);
        
        ConviteActivity.starterIntent = this.getIntent();
        		
        TextView titulo = (TextView)actionBar.getCustomView().findViewById(R.id.title);
        titulo.setText(R.string.convites);
        
        ImageView notification_icon = (ImageView)actionBar.getCustomView().findViewById(R.id.notification);
        notification_icon.setVisibility(View.GONE);
        
        ImageView actionbar_icon = (ImageView)actionBar.getCustomView().findViewById(R.id.actionbar_icon);
        actionbar_icon.setImageDrawable(getResources().getDrawable(R.drawable.ic_left_quote));
        
        //Faz voltar a activity
        actionbar_icon.setOnClickListener(new OnClickListener() {
	        @Override
			public void onClick(View view) {
	        	ConviteActivity.this.finish();
	        }
	    });
        
        setContentView(R.layout.activity_convite);
        getSupportFragmentManager().beginTransaction().replace(R.id.frag_menu, new MenuFragment()).commit();
        
        this.adapter = new ConvidadosConviteListAdapter(this);
        
        // Se foram enviados extras para essa activity da tela de novo convite 
        // exibe-se os dados
        Intent i = getIntent();
        
        if (i.hasExtra("idConvite")) {
        	int idConvite = i.getIntExtra("idConvite", 0);
        	
        	this.convite = new Convite(idConvite);
        	List<Convidado> convidados = ConviteActivity.this.convite.getConvidados();
        	
        	// Recupera o meu id de contato
            SharedPreferences preferences = getSharedPreferences("com.bora_bandeco", Context.MODE_PRIVATE);
            int meuIdContato = preferences.getInt("_id", 0);
            this.meuIdContato = meuIdContato;
            
        	
            // Preenche as informações da activity
        	
            TextView subtitulo = (TextView)findViewById(R.id.subtitulo);
            String textoSubtitulo = "";
        	// O texto de exibição é diferente para o anfitrião 
            if (this.convite.getAnfitriao().getId() == meuIdContato) {
            	textoSubtitulo = getResources().getString(R.string.mensagem_anfitriao_convite);
            	
            	if (convidados.size() > 1) {
            		textoSubtitulo = String.format(textoSubtitulo, convidados.size() + " pessoas ", convite.getRestaurante());
                } else if (convidados.size() == 1) {
                	String convidado = convite.getConvidados().get(0).getNome();
                	textoSubtitulo = String.format(textoSubtitulo, convidado, convite.getRestaurante());
                } else {
                	textoSubtitulo = String.format(textoSubtitulo, "ninguém", convite.getRestaurante());
                }
            	
            	// Além disso, o anfitrião não precisa dar resposta
            	this.esconderMenuInferior();
            } else {
            	textoSubtitulo = getResources().getString(R.string.mensagem_convite);
            	
            	String nomeAnfitriao = convite.getAnfitriao().getNome();
            	textoSubtitulo = String.format(textoSubtitulo, nomeAnfitriao, convite.getRestaurante());
            }
            subtitulo.setText(textoSubtitulo);
            
            TextView data = (TextView)findViewById(R.id.data);
            Date textoData = new Date(convite.getHorario());
            String dataFormatada = new SimpleDateFormat("dd/MM/yyyy HH'h'mm'm'").format(textoData);
            data.setText(dataFormatada);
 
            TextView verTodos = (TextView)findViewById(R.id.ver_todos);
            String linkVerTodos = "<u>" + getResources().getString(R.string.ver_todos) + "</u>";
            linkVerTodos = String.format(linkVerTodos, convidados.size() + 1); //Soma-se ao anfitrião
            verTodos.setText(Html.fromHtml(linkVerTodos));
            
            verTodos.setOnClickListener(new OnClickListener() {
            	
    			@Override
    			public void onClick(View arg0) {
    				List<Convidado> convidados = ConviteActivity.this.convite.getConvidados();
    				
					Dialog convidadosDialog = new Dialog(ConviteActivity.this, android.R.style.Theme_Light_NoTitleBar);
					convidadosDialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
					convidadosDialog.setContentView(getLayoutInflater().inflate(R.layout.dialog_convidados, null));
					convidadosDialog.show();
    				
					ConviteActivity.this.adapter.clear();
					
					Convidado anfitriao = new Convidado();
					anfitriao.setId(ConviteActivity.this.convite.getAnfitriao().getId());
					anfitriao.setNome(ConviteActivity.this.convite.getAnfitriao().getNome());
					anfitriao.setFoto(ConviteActivity.this.convite.getAnfitriao().getFoto());
					anfitriao.setNumeroTelefone(ConviteActivity.this.convite.getAnfitriao().getNumeroTelefone());
					anfitriao.setResposta(IREI);
					ConviteActivity.this.adapter.addItem(anfitriao);
					
    				for (Convidado convidado : convidados) {
    					ConviteActivity.this.adapter.addItem(convidado);
    				}
    				
    				GridView grid = (GridView)convidadosDialog.findViewById(R.id.gridview);
    				grid.setAdapter(ConviteActivity.this.adapter);
    	        }
    	    });
            
            TextView cardapio = (TextView)findViewById(R.id.cardapio);
            cardapio.setText(Html.fromHtml(convite.getCardapio()));
            
            //Verifica a resposta dada a este convite e modifica o menu inferior
            int minhaResposta = SEM_RESPOSTA;
            for (Convidado convidado : convite.getConvidados()) {
            	if (convidado.getId() == meuIdContato) {
            		minhaResposta = convidado.getResposta();
            		break;
            	}
            }
            exibirMenuPosResposta(minhaResposta);
            
            Button btnConfirmar = (Button) findViewById(R.id.confirmar);
            btnConfirmar.setOnClickListener(new OnClickListener() {
    	        
    			@Override
    			public void onClick(View arg0) {
    				int idConvite = ConviteActivity.this.convite.getId();
    				
    				int meuIdContato = ConviteActivity.this.meuIdContato;
    				
    				ConviteResponder responder = new ConviteResponder(ConviteActivity.this, idConvite, meuIdContato, IREI);
    				responder.execute();
    				
    				//Mostrar ícone de loading, esconde os outros elementos
    		        exibirCarregamento();
    	        }
    	    });
            
            Button btnCancelar = (Button) findViewById(R.id.cancelar);
            btnCancelar.setOnClickListener(new OnClickListener() {
    	        
    			@Override
    			public void onClick(View arg0) {
    				int idConvite = ConviteActivity.this.convite.getId();
    				
    				int meuIdContato = ConviteActivity.this.meuIdContato;
    				
    				ConviteResponder responder = new ConviteResponder(ConviteActivity.this, idConvite, meuIdContato, NAO_IREI);
    				responder.execute();
    				
    				//Mostrar ícone de loading, esconde os outros elementos
    		        exibirCarregamento();
    	        }
    	    });
        }
	}
	
	public void esconderMenuInferior() {
		View barraResposta = findViewById(R.id.buttonlayout);
    	barraResposta.setVisibility(View.GONE);
	}
	
	public void exibirCarregamento() {
        ImageView loaderView = (ImageView)findViewById(R.id.loader);
        loaderView.setBackgroundDrawable(getResources().getDrawable(R.drawable.loading));
        loaderView.setVisibility(View.VISIBLE);

        MyAnimationRoutine mar = new MyAnimationRoutine();
        Timer timer = new Timer(false);
        timer.schedule(mar, 1000);
        
        View v0 = findViewById(R.id.scrollview);
        v0.setVisibility(View.GONE);
        
        View v1 = findViewById(R.id.buttonlayout);
        v1.setVisibility(View.GONE);
	}
	
	public void esconderCarregamento() {
		ImageView loaderView = (ImageView)findViewById(R.id.loader);
        loaderView.setVisibility(View.GONE);
        
        View v0 = findViewById(R.id.scrollview);
        v0.setVisibility(View.VISIBLE);
        
        View v1 = findViewById(R.id.buttonlayout);
        v1.setVisibility(View.VISIBLE);
	}
	
	public void exibirMenuPosResposta(int resposta) {
		Button btnConfirmar = (Button) findViewById(R.id.confirmar);
		Button btnCancelar = (Button) findViewById(R.id.cancelar);
		
		if (resposta == IREI) {
			btnConfirmar.setVisibility(View.GONE);
			
			btnCancelar.setVisibility(View.VISIBLE);
			btnCancelar.setText(getString(R.string.desistir));
			
			RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)btnCancelar.getLayoutParams();
			params.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE);
			params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, 0);

			btnCancelar.setLayoutParams(params);
		} else if (resposta == NAO_IREI) {
			btnConfirmar.setVisibility(View.VISIBLE);
			btnConfirmar.setText(getString(R.string.mudei_de_ideia));
			
			btnCancelar.setVisibility(View.GONE);
		} else {
			btnConfirmar.setVisibility(View.VISIBLE);
			btnConfirmar.setText(getString(R.string.bora));
			
			btnCancelar.setVisibility(View.VISIBLE);
			btnCancelar.setText(getString(R.string.nem_vou));
		}
	}
	
	class MyAnimationRoutine extends TimerTask {
		MyAnimationRoutine() {
		}
		@Override
		public void run() {
			ImageView img = (ImageView)findViewById(R.id.loader);
			AnimationDrawable frameAnimation = (AnimationDrawable) img.getBackground();
			frameAnimation.start();
		}
	}
}
